poj 1001题
OUTPUT:
输入值为 R n
输出值为 R^n的具体数值
这个题在网上看见了一个很神奇的java代码,很清新,而且抱着试一试的心态通过了poj的text1
2
3
4
5
6
7
8
9
10
11
12
13import java.math.*;
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            BigDecimal val=in.nextBigDecimal();
            int n=in.nextInt();
            BigDecimal ret=val.pow(n).stripTrailingZeros();
            System.out.println( ret.toPlainString().replaceAll("^0", "") );
        }
    }
}
其中toPlanString(),返回不带指数字段的字符串,replaceAll(“^0”,””),。这篇文章的作者有很强编程能力,现在用C语言去完成这个高精度计算。
1  | 
  | 
 关于大数运算,某朋友给我提供了一个代码,不过在我阅读代码后没有发现有小数位的计算。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29string strMultiply(string str1 , string str2)  
{  
    string strResult = "";  
    int len1 = str1.length();   
    int len2 = str2.length();  
    int num[500] = {0};  
    int i = 0, j = 0;     
    for(i = 0; i < len1; i++)  
    {  
        for(j = 0; j < len2; j++)  
        {  
            num[len1-1 - i + len2-1 - j] += (str1[i] - '0')*(str2[j] - '0');   
        }  
    }  
    for(i = 0; i < len1 + len2; i++)  
    {  
        num[i+1] += num[i] / 10;  
        num[i] = num[i] % 10;  
    }  
    for(i = len1 + len2 - 1; i >= 0 ; i--)  
    {  
        if(0 != num[i]) break;  
    }  
    for(j = i; j >= 0; j--)  
    {  
        strResult += num[j] + '0';  
    }  
    return strResult;  
}